package 哈希表.有效的数独;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author: wh(1835734390 @ qq.com)
 * @date: 2023/8/11 17:15
 * @description:
 * @version:
 */
public class Solution {
    public static void main(String[] args) {

    }

    public static boolean isValidSudoku(char[][] board) {
        Map<Integer,Character> map = new HashMap<>();
        int start = 1;
        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j < board[i].length; j++) {
                map.put(start++,board[i][j]);
            }
        }
        //找出每一行的取值范围
        //找出每一列的取值范围
        //找出九宫格的取值范围
        return true;
    }

    public static boolean isValidSudoku2(char[][] board) {
        //定义数字行内出现的次数
        int[][] row = new int[9][9];
        //定义数字列内出现的次数
        int[][] column = new int[9][9];
        //定义数字九宫格内出现的次数最大为9次
        int[][][] jiugongge = new int[3][3][9];
        //遍历数组
        for (int i =0;i <9;i++){
            for(int j = 0;j<9;j++){
                char c = board[i][j];
                //只要存在数字
                if (c !='.'){
                    //把数字-1化成索引下标,c是字符串要减去字符串，-1会报错。
                    int index = c-'1';
                    //这个时候++意思是第i行这个c值次数+1，默认row第二位就是{1-9}-1；每一行都有可能是1-9
                    //例如现在是第一行第一列是9，就在row[1][8]号位置+1
                    row[i][index]++;
                    //列同理
                    column[j][index]++;
                    //并且九宫格内次数也要+1,例如也是第1行第一列，i/3 j/3会自动定位到所在的小宫格
                    jiugongge[i/3][j/3][index]++;
                    //次数大于1就不成立一个数独
                    if (row[i][index]>1||column[j][index]>1||jiugongge[i/3][j/3][index]>1) return false;
                }
            }
        }
        return true;
    }
}
